//定制请求的实例

//导入axios  npm install axios
import axios from 'axios';

import {ElMessage} from 'element-plus'
//定义一个变量,记录公共的前缀  ,  baseURL
const baseURL = '/api';
const instance = axios.create({baseURL})

//导入token状态
import { useTokenStore } from '@/stores/token.js';
//添加请求拦截器
instance.interceptors.request.use(
    (config)=>{
        //在发送请求之前做什么
        const tokenStore = useTokenStore()
        //如果token中有值，在携带
        if(tokenStore.token){
            config.headers.Authorization=tokenStore.token
        }
        return config
    },
    (err)=>{
        //如果请求错误做什么
        Promise.reject(err)
    }
)


import router from '@/router'
// 使用响应拦截器，处理服务器响应的结果
instance.interceptors.response.use(
    result => {
        // 检查响应数据的代码是否为0，表示成功
        if (result.data.code == 0) {
            // 如果成功，返回响应数据
            return result.data;
        }
        // 如果响应数据的代码不为0，弹出错误信息提示，并返回一个reject的Promise，携带响应数据
        //alert(result.data.msg ? result.data.msg : '服务错误');
        ElMessage.error(result.data.msg ? result.data.msg : '服务错误');
        return Promise.reject(result.data);
    },
    err => {
        // 处理请求失败的情况，弹出服务异常提示，并返回一个reject的Promise，携带错误对象
           //如果响应状态码时401，代表未登录，给出对应的提示，并跳转到登录页
           if(err.response.status===401){
            ElMessage.error('请先登录！')
            router.push('/login')
        }else{
            ElMessage.error('服务异常');
        }
        return Promise.reject(err);//异步的状态转化成失败的状态
    }
);

export default instance;